// 指定GLSL版本为OpenGL ES 3.0
#version 300 es

// 设置高精度浮点数
precision highp float;

// 统一变量（由外部传入的常量）
uniform float uT;           // 当前时间（秒）
uniform float uTModded;     // 修改后的时间（用于动画循环）
uniform float uDT;          // 帧间隔时间（秒）
uniform vec2 uWindowSize;   // 窗口尺寸（像素）
uniform vec2 uMouse;        // 鼠标位置（标准化坐标）
uniform sampler2D uTex;     // 2D纹理采样器

// 输入变量（从顶点着色器传入）
in vec2 vTexCoord;         // 当前片元的纹理坐标（标准化0-1）

// 输出变量
out vec4 color;            // 最终输出的颜色值（RGBA）

// 随机数生成函数
// 参数：二维坐标
// 返回：[0,1)范围内的均匀分布随机数
float nrand(vec2 n) {
  // 使用三角函数生成伪随机数
  return fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* 43758.5453);
}

// 带时间变化的随机数生成
// 参数：二维坐标
// 返回：随时间变化的随机数
float n1rand(vec2 n) {
  float t = fract(uTModded);  // 取小数部分实现循环动画
  float nrnd0 = nrand(n + 0.07 * t);  // 添加时间偏移
  return nrnd0;
}

void main() {
  // 以下是几种不同的纹理处理方式（当前被注释）：
  
  // 1. 基本纹理采样+随机噪声
  // vec4 c = texture(uTex, vTexCoord);
  // c.xyz += n1rand(vTexCoord);
  
  // 2. 纹理采样+特殊效果处理
  // vec4 v = texture(uTex, vTexCoord);
  // vec4 c = v * 1./texture(uTex, vec2(vTexCoord.x * .25, vTexCoord.y)) * 1.;
  
  // 3. 纹理采样+指数增强效果
  // vec4 c = v * exp(vTexCoord.x * 7.5) * 100000000.;
  
  // 4. Gamma校正（2.2为标准显示Gamma值）
  // c.xyz = pow(c.xyz, vec3(1.0/2.2));
  
  // 最终输出：直接采样纹理颜色
  color = texture(uTex, vTexCoord);
}